-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Erc4626 6 decimal asset support #4623
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Erc4626 6 decimal asset support #4623
Conversation
|
The bifrost-dex.ts adapter exports: |
|
The bifrost-chain.ts adapter exports: |
| const asset = assets[i] | ||
| if (asset) { | ||
| const assetDecimals = Number(decimals[i]); | ||
| const decimalAdjustment = BigInt(10 ** (18 - assetDecimals)); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why are using decimalAdjustment like this? Can you share an example vault need this fix?
The current logic is USDC has 6 decimals, totalAssets or totalSupply return 6 decimals
The rate always have 18 decimals
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hey, of course. Re; why I was doing it like this:
Problem:
convertToAssets takes in 18 decimal shares as input, but it returns values in the asset's native decimals. So rate doesn't always have 18 decimals.
Example:
Vault (hyperliquid, morpho, usdt0): 0xfc5126377f0efc0041c0969ef9ba903ce67d151e
// Start Date: Mon, 10 Nov 2025 20:47:56 GMT
// End Date: Tue, 11 Nov 2025 20:47:56 GMT
balance = 35,702,570,836,010
rateBefore = 1,045,623
rateAfter = 1,045,837
growthRate = 214
// Original calculation:
interestEarnedIncludingFees = balance * growthRate / BigInt(10**18)
= 35,702,570,836,010 * 214 / 1e18
= 0
// With decimalAdjustment:
interestEarnedIncludingFees = balance * growthRate / BigInt(10**18)
= 35,702,570,836,010 * 214,000,000,000,000 / 1e18
= 7,640,350,158
= 7,640.35 // convert from 6 decimals to USDThis should only impact <18 decimal assets.
Thank you!
noateden
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
.
The getVaultERC4626Info function wasn't correctly handling vaults with 6-decimal underlying assets (e.g., USDC, USDT, etc). This would result in effectively 0 fees for all associated vaults.
The problem is that 'convertToAssets' returns values in the underlying asset's decimal precision, but 'getMorphoVaultFee' assumes all rates are 18-decimal format when calculating interest.
I also addressed an issue w/ the bifrost dex and fees index.js files.
This is a follow-up to PR 4618 (closed).
NOTE
Please enable "Allow edits by maintainers" while putting up the PR.
poackage.json/package-lock.jsonfile as part of your changesName (to be shown on DefiLlama):
Twitter Link:
List of audit links if any:
Website Link:
Logo (High resolution, will be shown with rounded borders):
Current TVL:
Treasury Addresses (if the protocol has treasury)
Chain:
Coingecko ID (so your TVL can appear on Coingecko, leave empty if not listed): (https://api.coingecko.com/api/v3/coins/list)
Coinmarketcap ID (so your TVL can appear on Coinmarketcap, leave empty if not listed): (https://api.coinmarketcap.com/data-api/v3/map/all?listing_status=active,inactive,untracked&start=1&limit=10000)
Short Description (to be shown on DefiLlama):
Token address and ticker if any:
Category (full list at https://defillama.com/categories) *Please choose only one:
Oracle Provider(s): Specify the oracle(s) used (e.g., Chainlink, Band, API3, TWAP, etc.):
Implementation Details: Briefly describe how the oracle is integrated into your project:
Documentation/Proof: Provide links to documentation or any other resources that verify the oracle's usage:
forkedFrom (Does your project originate from another project):
methodology (what is being counted as tvl, how is tvl being calculated):
Github org/user (Optional, if your code is open source, we can track activity):